package exception02;

/*
第一种格式：
   try{
       //第一种可能:try中的代码没有抛出异常，那么会去执行finally中的语句，程序继续向下执行
       //第二种可能:try中的代码出现了异常，异常下面的代码不再执行(try中的)，接着会去找对应的catch处理这个异常
                  执行catch中的语句，执行完catch中的语句，接着会去执行finally中的语句
                  finally语句执行完之后，程序继续向下执行
   }catch(异常类型 变量名){

   }....finally{  //finall跟在最后一个catch末尾
       //无论try中是否抛出异常，finally中的语句都会执行
       //我们一般把资源释放语句放在finally中，防止资源无法释放，例如：IO流关闭，数据连接关闭...
   }

第二种格式：
   try{
       //第一种可能:try中的代码没有抛出异常，那么会去执行finally中的语句，程序继续向下执行
       //第二种可能:try中的代码出现了异常，此时try下面的语句不再执行(try中)，接着会去执行finally中的语句
                  执行完finally中的语句之后，JVM还去处理这个异常，采用默认处理方式，打印异常信息和异常追踪信息
                  最后停止程序
   }finally{
       //无论try中是否抛出异常，finally中的语句都会执行
   }

 */
public class ExceptionDemo06 {
    public static void main(String[] args) throws Exception{//main方法这里的throws异常声明是给jvm看的

        //method01();
        try {
          /*  int totalPrice = getTotalPrice(3, 20);
            System.out.println(totalPrice);*/

            int totalPrice = getTotalPrice(-3, 20);
            System.out.println(totalPrice);

        }finally{
            System.out.println("fially中的代码语句被执行");
        }
        System.out.println("程序执行结束");


    }
    /**文档注释
     *
     * @param price  单价
     * @param amount  数量
     * @return    返回总价
     */
    public static int getTotalPrice(int price, int amount) throws Exception{
        //当他看到这个异常声明就知道需要处理
        if (price < 0) {
            throw new Exception("价格不能为负值"+price);
        }

        return price * amount;
    }

    private static void method01() {
        try {
           /* int totalPrice = getTotalPrice(3, 20);
            System.out.println(totalPrice);*/
            int totalPrice = getTotalPrice(-3, 20);
            System.out.println(totalPrice);

        } catch (Exception e) {
            System.out.println("捕获了Exception异常");
        }finally{
            System.out.println("fially中的代码语句被执行");
        }
        System.out.println("程序执行结束");
    }


}
